.
├── Jenkinsfile ← Pipeline Jenkins (3 stages)
├── docker-compose.yml ← Définition des services Docker
├── Dockerfile ← Image applicative (exemple Java)
└── README.md
┌─────────────────────────────────────────────────────────┐
│ JENKINS PIPELINE │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌────────────────────┐ │
│ │ STAGE 1 │ │ STAGE 2 │ │ STAGE 3 │ │
│ │ │ │ │ │ │ │
│ │ Pull & Build │→ │ Security Scan │→ │ CSV Report │ │
│ │ Docker Image │ │ with Trivy │ │ Generation │ │
│ │ │ │ │ │ │ │
│ │ docker compose │ │ trivy image scan │ │ JSON → CSV │ │
│ │ pull + build │ │ → JSON report │ │ LOW/MEDIUM/CRITICAL│ │
│ └──────────────────┘ └──────────────────┘ └────────────────────┘ │
└─────────────────────────────────────────────────────────┘
↓
trivy-report.csv (archivé)
trivy-report.json (archivé)
docker compose pull: télécharge toutes les images de base déclaréesdocker compose build --no-cache: construit les images custom sans cache- Garantit une image fraîche à chaque exécution du pipeline
- Vérifie la présence de Trivy sur l'agent Jenkins
- Met à jour la base de données de vulnérabilités CVE
- Scanne l'image avec filtrage par sévérité : LOW, MEDIUM, CRITICAL
- Produit un rapport intermédiaire
trivy-report.json
- Script Python embarqué convertit le JSON en CSV structuré
- Colonnes du CSV :
| Colonne | Description |
|---|---|
Target |
Nom de la cible scannée |
PackageType |
Type de paquet (os, library…) |
VulnerabilityID |
Identifiant CVE |
Severity |
LOW / MEDIUM / CRITICAL |
PackageName |
Nom du paquet vulnérable |
InstalledVersion |
Version installée |
FixedVersion |
Version corrective disponible |
Title |
Titre court de la CVE |
Description |
Description (tronquée à 200 chars) |
References |
Lien de référence principal |
- Tri automatique : CRITICAL → MEDIUM → LOW
- Résumé affiché dans les logs Jenkins
- Rapport archivé comme artefact Jenkins
# Docker & Docker Compose
sudo apt install docker.io docker-compose-plugin -y
# Trivy
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
# Python 3 (généralement déjà présent)
sudo apt install python3 -ysudo usermod -aG docker jenkins
sudo systemctl restart jenkins- Créer un nouveau job Pipeline dans Jenkins
- Pointer sur le dépôt Git contenant ces fichiers
- Sélectionner
Jenkinsfilecomme script de pipeline - Lancer le build
- Aller dans
Build > Artefacts archivés - Télécharger
trivy-report.csv - Ouvrir avec Excel / LibreOffice / tout éditeur CSV
Dans Jenkinsfile, modifier la variable :
IMAGE_NAME = "myapp" // → nom:tag de votre imageSEVERITY_FILTER = "LOW,MEDIUM,CRITICAL" // ou "HIGH,CRITICAL" uniquementDans le stage Trivy, changer :
--exit-code 0 → --exit-code 1Target,PackageType,VulnerabilityID,Severity,PackageName,InstalledVersion,FixedVersion,Title,Description,References
myapp:latest (alpine 3.18.4),os,CVE-2023-5363,CRITICAL,openssl,3.1.3-r0,3.1.4-r0,OpenSSL issue...,Vulnerability in...,https://nvd.nist.gov/...
myapp:latest (alpine 3.18.4),os,CVE-2023-3446,MEDIUM,openssl,3.1.3-r0,3.1.4-r0,DH key check issue,...,https://nvd.nist.gov/...